1 module devisualization.util.opengl.function_wrappers.v20; 2 import gl = derelict.opengl3.gl; 3 import gldepcnst = derelict.opengl3.deprecatedConstants; 4 import devisualization.util.opengl.function_wrappers.v12; 5 6 enum DrawBuffers { 7 None = gldepcnst.GL_NONE, 8 FrontLeft = gl.GL_FRONT_LEFT, 9 FrontRight = gl.GL_FRONT_RIGHT, 10 BackLeft = gl.GL_BACK_LEFT, 11 BackRight = gl.GL_BACK_RIGHT, 12 ColorAttachment0 = gl.GL_COLOR_ATTACHMENT0 13 } 14 15 enum Faces { 16 Front = gl.GL_FRONT, 17 Back = gl.GL_BACK, 18 FrontAndBack = gl.GL_FRONT_AND_BACK 19 } 20 21 enum FaceStencilAction { 22 Keep = gl.GL_KEEP, 23 Zero = gl.GL_ZERO, 24 Replace = gl.GL_REPLACE, 25 Incr = gl.GL_INCR, 26 IncrWrap = gl.GL_INCR_WRAP, 27 Decr = gl.GL_DECR, 28 DecrWrap = gl.GL_DECR_WRAP, 29 Invert = gl.GL_INVERT 30 } 31 32 enum TestFunctions { 33 Never = gl.GL_NEVER, 34 Less = gl.GL_LESS, 35 LEqual = gl.GL_LEQUAL, 36 Greater = gl.GL_GREATER, 37 GEqual = gl.GL_GEQUAL, 38 Equal = gl.GL_EQUAL, 39 NotEqual = gl.GL_NOTEQUAL, 40 Always = gl.GL_ALWAYS 41 } 42 43 enum ShaderTypes { 44 ComputeShader = gl.GL_COMPUTE_SHADER, 45 VertexShader = gl.GL_VERTEX_SHADER, 46 TessControlShader = gl.GL_TESS_CONTROL_SHADER, 47 TessEvaluationShader = gl.GL_TESS_EVALUATION_SHADER, 48 GeometryShader = gl.GL_GEOMETRY_SHADER, 49 FragmentShader = gl.GL_FRAGMENT_SHADER 50 } 51 52 enum AttribDataTypes { 53 Float = gl.GL_FLOAT, 54 FloatVec2 = gl.GL_FLOAT_VEC2, 55 FloatVec3 = gl.GL_FLOAT_VEC3, 56 FloatVec4 = gl.GL_FLOAT_VEC4, 57 FloatMat2 = gl.GL_FLOAT_MAT2, 58 FloatMat3 = gl.GL_FLOAT_MAT3, 59 FloatMat4 = gl.GL_FLOAT_MAT4, 60 FloatMat2x3 = gl.GL_FLOAT_MAT2x3, 61 FloatMat2x4 = gl.GL_FLOAT_MAT2x4, 62 FloatMat3x2 = gl.GL_FLOAT_MAT3x2, 63 FloatMat3x4 = gl.GL_FLOAT_MAT3x4, 64 FloatMat4x2 = gl.GL_FLOAT_MAT4x2, 65 FloatMat4x3 = gl.GL_FLOAT_MAT4x3, 66 Int = gl.GL_INT, 67 IntVec2 = gl.GL_INT_VEC2, 68 IntVec3 = gl.GL_INT_VEC3, 69 IntVec4 = gl.GL_INT_VEC4, 70 UInt = gl.GL_UNSIGNED_INT, 71 UIntVec2 = gl.GL_UNSIGNED_INT_VEC2, 72 UIntVec3 = gl.GL_UNSIGNED_INT_VEC3, 73 UIntVec4 = gl.GL_UNSIGNED_INT_VEC4, 74 Double = gl.GL_DOUBLE, 75 DoubleVec2 = gl.GL_DOUBLE_VEC2, 76 DoubleVec3 = gl.GL_DOUBLE_VEC3, 77 DoubleVec4 = gl.GL_DOUBLE_VEC4, 78 DoubleMat2 = gl.GL_DOUBLE_MAT2, 79 DoubleMat3 = gl.GL_DOUBLE_MAT3, 80 DoubleMat4 = gl.GL_DOUBLE_MAT4, 81 DoubleMat2x3 = gl.GL_DOUBLE_MAT2x3, 82 DoubleMat2x4 = gl.GL_DOUBLE_MAT2x4, 83 DoubleMat3x2 = gl.GL_DOUBLE_MAT3x2, 84 DoubleMat3x4 = gl.GL_DOUBLE_MAT3x4, 85 DoubleMat4x2 = gl.GL_DOUBLE_MAT4x2, 86 DoubleMat4x3 = gl.GL_DOUBLE_MAT4x3 87 } 88 89 enum ProgramObjects { 90 DeleteStatus = gl.GL_DELETE_STATUS, 91 LinkStatus = gl.GL_LINK_STATUS, 92 ValidateStatus = gl.GL_VALIDATE_STATUS, 93 InfoLogStatus = gl.GL_INFO_LOG_LENGTH, 94 AttachedShaders = gl.GL_ATTACHED_SHADERS, 95 ActiveAttributes = gl.GL_ACTIVE_ATTRIBUTES, 96 ActiveAttributeMaxLength = gl.GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, 97 ActiveUniforms = gl.GL_ACTIVE_UNIFORMS, 98 ActiveUniformMaxLength = gl.GL_ACTIVE_UNIFORM_MAX_LENGTH 99 } 100 101 enum ShaderObjects { 102 ShaderType = gl.GL_SHADER_TYPE, 103 DeleteStatus = gl.GL_DELETE_STATUS, 104 CompileStatus = gl.GL_COMPILE_STATUS, 105 InfoLogLength = gl.GL_INFO_LOG_LENGTH, 106 ShaderSourceLength = gl.GL_SHADER_SOURCE_LENGTH 107 } 108 109 enum VertexAttributeNames { 110 ArrayBufferBindings = gl.GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, 111 ArrayEnabled = gl.GL_VERTEX_ATTRIB_ARRAY_ENABLED, 112 ArraySize = gl.GL_VERTEX_ATTRIB_ARRAY_SIZE, 113 ArrayStride = gl.GL_VERTEX_ATTRIB_ARRAY_STRIDE, 114 ArrayType = gl.GL_VERTEX_ATTRIB_ARRAY_TYPE, 115 ArrayNormalized = gl.GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, 116 ArrayInteger = gl.GL_VERTEX_ATTRIB_ARRAY_INTEGER, 117 ArrayDivisor = gl.GL_VERTEX_ATTRIB_ARRAY_DIVISOR, 118 Current = gl.GL_CURRENT_VERTEX_ATTRIB 119 } 120 121 enum AttribPointerSize { 122 One = 1, 123 Two = 2, 124 Three = 3, 125 Four = 4, 126 BGRA = gl.GL_BGRA 127 } 128 129 enum AttribPointerType { 130 Byte = gl.GL_BYTE, 131 UByte = gl.GL_UNSIGNED_BYTE, 132 Short = gl.GL_SHORT, 133 UShort = gl.GL_UNSIGNED_SHORT, 134 Int = gl.GL_INT, 135 UInt = gl.GL_UNSIGNED_INT, 136 HalfFloat = gl.GL_HALF_FLOAT, 137 Float = gl.GL_FLOAT, 138 Double = gl.GL_DOUBLE, 139 Fixed = gl.GL_FIXED, 140 Int2101010REV = gl.GL_INT_2_10_10_10_REV, 141 UInt2101010Rev = gl.GL_UNSIGNED_INT_2_10_10_10_REV, 142 UInt10F11F11FRev = gl.GL_UNSIGNED_INT_10F_11F_11F_REV 143 } 144 145 void glBlendEquationSeparate(BlendMode modeRGB, BlendMode modeAlpha) { 146 gl.glBlendEquationSeparate(cast(gl.GLenum)modeRGB, cast(gl.GLenum)modeAlpha); 147 } 148 149 void glDrawBuffers(int n, DrawBuffers[] bufs) { 150 gl.glDrawBuffers(n, cast(gl.GLenum*)bufs.ptr); 151 } 152 153 void glStencilOpSeparate(Faces face, FaceStencilAction sfail, FaceStencilAction dpfail, FaceStencilAction dppass) { 154 gl.glStencilOpSeparate(cast(gl.GLenum)face, cast(gl.GLenum)sfail, cast(gl.GLenum)dpfail, cast(gl.GLenum)dppass); 155 } 156 157 void glStencilFuncSeparate(Faces face, TestFunctions func, int ref_, uint mask) { 158 gl.glStencilFuncSeparate(cast(gl.GLenum)face, cast(gl.GLenum)func, ref_, mask); 159 } 160 161 void glStencilMaskSeparate(Faces face, uint mask) { 162 gl.glStencilMaskSeparate(cast(gl.GLenum)face, mask); 163 } 164 165 void glAttachShader(uint program, uint shader) { 166 gl.glAttachShader(program, shader); 167 } 168 169 void glBindAttribLocation(uint program, uint index, string name) { 170 gl.glBindAttribLocation(program, index, (name ~ 0).ptr); 171 } 172 173 void glCompileShader(uint shader) { 174 gl.glCompileShader(shader); 175 } 176 177 uint glCreateProgram() { 178 return gl.glCreateProgram(); 179 } 180 181 uint glCreateShader(ShaderTypes shaderType) { 182 return gl.glCreateShader(cast(gl.GLenum)shaderType); 183 } 184 185 void glDeleteProgram(uint program) { 186 gl.glDeleteProgram(program); 187 } 188 189 void glDeleteShader(uint shader) { 190 gl.glDeleteShader(shader); 191 } 192 193 void glDetachShader(uint program, uint shader) { 194 gl.glDetachShader(program, shader); 195 } 196 197 void glDisableVertexAttribArray(uint index) { 198 gl.glDisableVertexAttribArray(index); 199 } 200 201 void glEnableVertexAttribArray(uint index) { 202 gl.glEnableVertexAttribArray(index); 203 } 204 205 void glGetActiveAttrib(uint program, uint index, out int* size, out AttribDataTypes type, out string name) { 206 gl.glGetActiveAttrib(program, index, int.max, cast(int*)null, size, cast(gl.GLenum*)&type, cast(char*)name.ptr); 207 name = name[0 .. $-1]; 208 } 209 210 void glGetActiveUniform(uint program, uint index, out int size, out AttribDataTypes type, out string name) { 211 gl.glGetActiveUniform(program, index, int.max, cast(int*)null, &size, cast(gl.GLenum*)&type, cast(char*)name.ptr); 212 name = name[0 .. $-1]; 213 } 214 215 void glGetAttachedShaders(uint program, out uint[] shaders) { 216 int* count; 217 gl.glGetAttachedShaders(program, int.max, count, shaders.ptr); 218 } 219 220 int glGetAttribLocation(uint program, string name) { 221 return gl.glGetAttribLocation(program, (name ~ 0).ptr); 222 } 223 224 void glGetProgram(uint program, ProgramObjects pname, out int params) { 225 gl.glGetProgramiv(program, cast(gl.GLenum)pname, ¶ms); 226 } 227 228 void glGetProgram(uint program, ProgramObjects pname, out int[] params) { 229 gl.glGetProgramiv(program, cast(gl.GLenum)pname, params.ptr); 230 } 231 232 string glGetProgramInfoLog(uint program) { 233 string ret; 234 int* length; 235 gl.glGetProgramInfoLog(program, int.max, length, cast(char*)ret.ptr); 236 return ret[0 .. $-1]; 237 } 238 239 void glGetShader(uint shader, ShaderObjects pname, out int params) { 240 gl.glGetShaderiv(shader, cast(gl.GLenum)pname, ¶ms); 241 } 242 243 void glGetShader(uint shader, ShaderObjects pname, out int[] params) { 244 gl.glGetShaderiv(shader, cast(gl.GLenum)pname, params.ptr); 245 } 246 247 void glGetShaderInfoLog(uint shader, string infoLog) { 248 int* length; 249 gl.glGetShaderInfoLog(shader, int.max, length, cast(char*)infoLog.ptr); 250 infoLog = infoLog[0 .. $-1]; 251 } 252 253 string glGetShaderSource(uint shader) { 254 string ret; 255 int* length; 256 gl.glGetShaderInfoLog(shader, int.max, length, cast(char*)ret.ptr); 257 ret = ret[0 .. $-1]; 258 return ret; 259 } 260 261 int glGetUniformLocation(uint program, string name) { 262 return gl.glGetUniformLocation(program, cast(char*)(name ~ 0).ptr); 263 } 264 265 void glGetUniform(uint program, int location, float[] params) { 266 gl.glGetUniformfv(program, location, params.ptr); 267 } 268 269 void glGetUniform(uint program, int location, int[] params) { 270 gl.glGetUniformiv(program, location, params.ptr); 271 } 272 273 void glGetVertexAttrib(uint index, VertexAttributeNames pname, double[] params) { 274 gl.glGetVertexAttribdv(index, cast(gl.GLenum)pname, params.ptr); 275 } 276 277 void glGetVertexAttrib(uint index, VertexAttributeNames pname, float[] params) { 278 gl.glGetVertexAttribfv(index, cast(gl.GLenum)pname, params.ptr); 279 } 280 281 void glGetVertexAttrib(uint index, VertexAttributeNames pname, int[] params) { 282 gl.glGetVertexAttribiv(index, cast(gl.GLenum)pname, params.ptr); 283 } 284 285 void*[] glGetVertexAttribPointer(uint index) { 286 void*[] ret; 287 gl.glGetVertexAttribPointerv(index, gl.GL_VERTEX_ATTRIB_ARRAY_POINTER, ret.ptr); 288 return ret; 289 } 290 291 bool glIsProgram(uint program) { 292 return cast(bool)gl.glIsProgram(program); 293 } 294 295 bool glIsShader(uint shader) { 296 return cast(bool)gl.glIsShader(shader); 297 } 298 299 void glLinkProgram(uint program) { 300 gl.glLinkProgram(program); 301 } 302 303 void glShaderSource(uint shader, string _string) { 304 if (_string[$-1] != 0) _string ~= 0; 305 size_t length = _string.length; 306 auto str = _string.ptr; 307 gl.glShaderSource(shader, 1, cast(const(gl.GLchar*)*)&str, cast(const(int)*)&length); 308 } 309 310 void glUseProgram(uint program) { 311 gl.glUseProgram(program); 312 } 313 314 void glUniform(int location, float v0) { 315 gl.glUniform1f(location, v0); 316 } 317 318 void glUniform(int location, float v0, float v1) { 319 gl.glUniform2f(location, v0, v1); 320 } 321 322 void glUniform(int location, float v0, float v1, float v2) { 323 gl.glUniform3f(location, v0, v1, v2); 324 } 325 326 void glUniform(int location, float v0, float v1, float v2, float v3) { 327 gl.glUniform4f(location, v0, v1, v2, v3); 328 } 329 330 void glUniform(int location, int v0) { 331 gl.glUniform1i(location, v0); 332 } 333 334 void glUniform(int location, int v0, int v1) { 335 gl.glUniform2i(location, v0, v1); 336 } 337 338 void glUniform(int location, int v0, int v1, int v2) { 339 gl.glUniform3i(location, v0, v1, v2); 340 } 341 342 void glUniform(int location, int v0, int v1, int v2, int v3) { 343 gl.glUniform4i(location, v0, v1, v2, v3); 344 } 345 346 void glUniform(int location, float[] value) 347 in { 348 assert(value.length >= 1 && value.length <= 4); 349 } body { 350 if (value.length == 1) 351 gl.glUniform1fv(location, 1, value.ptr); 352 else if (value.length == 2) 353 gl.glUniform2fv(location, 1, value.ptr); 354 else if (value.length == 3) 355 gl.glUniform3fv(location, 1, value.ptr); 356 else if (value.length == 4) 357 gl.glUniform4fv(location, 1, value.ptr); 358 } 359 360 void glUniform(int location, int[] value) 361 in { 362 assert(value.length >= 1 && value.length <= 4); 363 } body { 364 if (value.length == 1) 365 gl.glUniform1iv(location, 1, value.ptr); 366 else if (value.length == 2) 367 gl.glUniform2iv(location, 1, value.ptr); 368 else if (value.length == 3) 369 gl.glUniform3iv(location, 1, value.ptr); 370 else if (value.length == 4) 371 gl.glUniform4iv(location, 1, value.ptr); 372 } 373 374 void glUniform(int location, uint[] value) 375 in { 376 assert(value.length >= 1 && value.length <= 4); 377 } body { 378 if (value.length == 1) 379 gl.glUniform1uiv(location, cast(int)value.length, value.ptr); 380 else if (value.length == 2) 381 gl.glUniform2uiv(location, cast(int)value.length, value.ptr); 382 else if (value.length == 3) 383 gl.glUniform3uiv(location, cast(int)value.length, value.ptr); 384 else if (value.length == 4) 385 gl.glUniform4uiv(location, cast(int)value.length, value.ptr); 386 } 387 388 void glUniformMatrix2(int location, bool transpose, float[] value) { 389 gl.glUniformMatrix2fv(location, cast(int)(value.length / 4), cast(ubyte)(transpose ? gl.GL_TRUE : gl.GL_FALSE), value.ptr); 390 } 391 392 void glUniformMatrix3(int location, bool transpose, float[] value) { 393 gl.glUniformMatrix3fv(location, cast(int)(value.length / 9), cast(ubyte)(transpose ? gl.GL_TRUE : gl.GL_FALSE), value.ptr); 394 } 395 396 void glUniformMatrix4(int location, bool transpose, float[] value) { 397 gl.glUniformMatrix4fv(location, cast(int)(value.length / 16), cast(ubyte)(transpose ? gl.GL_TRUE : gl.GL_FALSE), value.ptr); 398 } 399 400 void glValidateProgram(uint program) { 401 gl.glValidateProgram(program); 402 } 403 404 void glVertexAttrib(uint index, double v0) { 405 gl.glVertexAttrib1d(index, v0); 406 } 407 408 void glVertexAttrib(uint index, float v) { 409 gl.glVertexAttrib1f(index, v); 410 } 411 412 void glVertexAttrib(uint index, short v0) { 413 gl.glVertexAttrib1s(index, v0); 414 } 415 416 void glVertexAttrib(uint index, double v0, double v1) { 417 gl.glVertexAttrib2d(index, v0, v1); 418 } 419 420 void glVertexAttrib(uint index, double[2] v) { 421 gl.glVertexAttrib2dv(index, v.ptr); 422 } 423 424 void glVertexAttrib(uint index, float v0, float v1) { 425 gl.glVertexAttrib2f(index, v0, v1); 426 } 427 428 void glVertexAttrib(uint index, float[2] v) { 429 gl.glVertexAttrib2fv(index, v.ptr); 430 } 431 432 void glVertexAttrib(uint index, short v0, short v1) { 433 gl.glVertexAttrib2s(index, v0, v1); 434 } 435 436 void glVertexAttrib(uint index, short[2] v) { 437 gl.glVertexAttrib2sv(index, v.ptr); 438 } 439 440 void glVertexAttrib(uint index, double v0, double v1, double v2) { 441 gl.glVertexAttrib3d(index, v0, v1, v2); 442 } 443 444 void glVertexAttrib(uint index, double[3] v) { 445 gl.glVertexAttrib3dv(index, v.ptr); 446 } 447 448 void glVertexAttrib(uint index, float v0, float v1, float v2) { 449 gl.glVertexAttrib3f(index, v0, v1, v2); 450 } 451 452 void glVertexAttrib(uint index, float[3] v) { 453 gl.glVertexAttrib3fv(index, v.ptr); 454 } 455 456 void glVertexAttrib(uint index, short v0, short v1, short v2) { 457 gl.glVertexAttrib3s(index, v0, v1, v2); 458 } 459 460 void glVertexAttrib(uint index, short[3] v) { 461 gl.glVertexAttrib3sv(index, v.ptr); 462 } 463 464 /* 465 bindGLFunc(cast(void**)&glVertexAttrib4Nbv, "glVertexAttrib4Nbv"); 466 bindGLFunc(cast(void**)&glVertexAttrib4Niv, "glVertexAttrib4Niv"); 467 bindGLFunc(cast(void**)&glVertexAttrib4Nsv, "glVertexAttrib4Nsv"); 468 bindGLFunc(cast(void**)&glVertexAttrib4Nub, "glVertexAttrib4Nub"); 469 bindGLFunc(cast(void**)&glVertexAttrib4Nubv, "glVertexAttrib4Nubv"); 470 bindGLFunc(cast(void**)&glVertexAttrib4Nuiv, "glVertexAttrib4Nuiv"); 471 bindGLFunc(cast(void**)&glVertexAttrib4Nusv, "glVertexAttrib4Nusv"); 472 bindGLFunc(cast(void**)&glVertexAttrib4bv, "glVertexAttrib4bv"); 473 bindGLFunc(cast(void**)&glVertexAttrib4d, "glVertexAttrib4d"); 474 bindGLFunc(cast(void**)&glVertexAttrib4dv, "glVertexAttrib4dv");*/ 475 476 void glVertexAttrib(uint index, float v0, float v1, float v2, float v3) { 477 gl.glVertexAttrib4f(index, v0, v1, v2, v3); 478 } 479 480 void glVertexAttrib(uint index, float[4] v) { 481 gl.glVertexAttrib4fv(index, v.ptr); 482 } 483 484 /* 485 bindGLFunc(cast(void**)&glVertexAttrib4iv, "glVertexAttrib4iv"); 486 bindGLFunc(cast(void**)&glVertexAttrib4s, "glVertexAttrib4s"); 487 bindGLFunc(cast(void**)&glVertexAttrib4sv, "glVertexAttrib4sv"); 488 bindGLFunc(cast(void**)&glVertexAttrib4ubv, "glVertexAttrib4ubv"); 489 bindGLFunc(cast(void**)&glVertexAttrib4uiv, "glVertexAttrib4uiv"); 490 bindGLFunc(cast(void**)&glVertexAttrib4usv, "glVertexAttrib4usv");*/ 491 492 void glVertexAttribPointer(uint index, AttribPointerSize size, AttribPointerType type, bool normalized, int stride, void* pointer) { 493 gl.glVertexAttribPointer(index, size, type, normalized ? gl.GL_TRUE : gl.GL_FALSE, stride, pointer); 494 }